﻿using System;
using System.Windows.Forms;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.SqlClient;
using System.Data;
using nmConnectionDatabase;

namespace nmArticulosVenta
{
    public class ArticulosVentas
    {
        // ###############################################################################################
        // # PROPIEDADES #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*##*#*#*#*#*#*#*##*#*#*#*#*#*#*#*#*#
        // ###############################################################################################

        public string TipoProducto { get; set; }
        public string IDConsola { get; set; }
        public string IDProducto { get; set; }
        private string NumFactura { get; set; }
        private int Cantidad { get; set; }
        private float Precio { get; set; }


        // ###############################################################################################
        // # METODOS #*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*#*##*#*#*#*#*#*#*##*#*#*#*#*#*#*#*#*#*#*#
        // ###############################################################################################

        // ########################################################################
        // # SET ##################################################################
        // -------------------------------------------------
        public void setTipoProducto(string param)
        {
            this.TipoProducto = param;
        }
        // -------------------------------------------------
        public void setIDConsola(string param)
        {
            this.IDConsola = param;
        }
        // -------------------------------------------------
        public void setIDProducto(string param)
        {
            this.IDProducto = param;
        }
        // -------------------------------------------------
        public void setNumFactura(string param)
        {
            this.NumFactura = param;
        }
        // -------------------------------------------------
        public void setCantidad(int param)
        {
            this.Cantidad = param;
        }
        // -------------------------------------------------
        public void setPrecio(float param)
        {
            this.Precio = param;
        }

        // ########################################################################
        // # AGREGAR ARTICULO X VENTA #############################################
        // -------------------------------------------------
        public void AgregarArticulo(string Ruta)
        {
            try
            {
                SqlCommand comando = new SqlCommand();
                ParametrosAgregarArticulo(ref comando);
                spVentas(Ruta, "spInsertArticulosXVenta", comando);
            }

            catch (SqlException ex)
            {
                mostrarErrorSQL(ex);
            }

        }
        // -------------------------------------------------
        public void ParametrosAgregarArticulo(ref SqlCommand comando)
        {
            SqlParameter SqlParametros = new SqlParameter();

            //Primer Parametro
            SqlParametros = comando.Parameters.Add("@TipoProducto", SqlDbType.Char, 1);
            SqlParametros.Value = TipoProducto;

            //Segundo Parametro
            SqlParametros = comando.Parameters.Add("@IDConsola", SqlDbType.NChar, 2);
            SqlParametros.Value = IDConsola;

            //Tercer Parametro
            SqlParametros = comando.Parameters.Add("@IDProducto", SqlDbType.NChar, 4);
            SqlParametros.Value = IDProducto;

            //Cuarto Parametro
            SqlParametros = comando.Parameters.Add("@NumFactura", SqlDbType.NChar, 8);
            SqlParametros.Value = NumFactura;

            //Quinto Parametro
            SqlParametros = comando.Parameters.Add("@Cantidad", SqlDbType.Int);
            SqlParametros.Value = Cantidad;

            //Sexto Parametro
            SqlParametros = comando.Parameters.Add("@Precio", SqlDbType.Float);
            SqlParametros.Value = Precio.ToString() ;
        }

        // ########################################################################
        // # VARIOS ###############################################################
        // -------------------------------------------------
        private void spVentas(String RutaBD, String NombreSP, SqlCommand Comando)
        {
            try
            {
                SqlConnection Conexion = new SqlConnection(RutaBD);
                Conexion.Open();
                SqlCommand cmd = new SqlCommand();
                cmd = Comando;
                cmd.Connection = Conexion;
                cmd.CommandType = CommandType.StoredProcedure;
                cmd.CommandText = NombreSP;
                cmd.ExecuteNonQuery();
                Conexion.Close();
            }

            catch (SqlException ex)
            {
                mostrarErrorSQL(ex);
            }
        }
        // -------------------------------------------------
        public void mostrarErrorSQL(SqlException ex)
        {
            StringBuilder errorMessages = new StringBuilder();
            for (int i = 0; i < ex.Errors.Count; i++)
            {
                errorMessages.Append("Index #" + i + "\n" +
                    "Message: " + ex.Errors[i].Message + "\n" +
                    "LineNumber: " + ex.Errors[i].LineNumber + "\n" +
                    "Source: " + ex.Errors[i].Source + "\n" +
                    "Procedure: " + ex.Errors[i].Procedure + "\n");
            }

            MessageBox.Show(errorMessages.ToString());
        }
    }
}
